home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Graphics Programming (2nd Edition) / Visual Basic Graphics Programming 2nd Edition.iso / OldSrc / CH10 / SRC / OBJGRID1.CLS < prev    next >
Text File  |  1996-05-04  |  6KB  |  211 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4. END
  5. Attribute VB_Name = "ObjGrid3D"
  6. Attribute VB_Creatable = False
  7. Attribute VB_Exposed = False
  8. Option Explicit
  9.  
  10. Private Xmin As Single      ' Min X and Y values.
  11. Private Zmin As Single
  12. Private Dx As Single        ' Spacing between rows of data.
  13. Private Dz As Single
  14. Private NumX As Integer     ' Number of X and Y entries.
  15. Private NumZ As Integer
  16. Private Points() As Point3D ' Data values.
  17.  
  18. ' ************************************************
  19. ' Create the Points array.
  20. ' ************************************************
  21. Sub SetBounds(x1 As Single, deltax As Single, xnum As Integer, z1 As Single, deltaz As Single, znum As Integer)
  22. Dim i As Integer
  23. Dim j As Integer
  24. Dim x As Single
  25. Dim z As Single
  26.  
  27.     Xmin = x1
  28.     Zmin = z1
  29.     Dx = deltax
  30.     Dz = deltaz
  31.     NumX = xnum
  32.     NumZ = znum
  33.     ReDim Points(1 To NumX, 1 To NumZ)
  34.     
  35.     x = Xmin
  36.     For i = 1 To NumX
  37.         z = Zmin
  38.         For j = 1 To NumZ
  39.             Points(i, j).coord(1) = x
  40.             Points(i, j).coord(2) = 0
  41.             Points(i, j).coord(3) = z
  42.             Points(i, j).coord(4) = 1#
  43.             z = z + Dz
  44.         Next j
  45.         x = x + Dx
  46.     Next i
  47. End Sub
  48. ' ************************************************
  49. ' Save the indicated data value.
  50. ' ************************************************
  51. Sub SetValue(x As Single, y As Single, z As Single)
  52. Dim i As Integer
  53. Dim j As Integer
  54.  
  55.     i = (x - Xmin) / Dx + 1
  56.     j = (z - Zmin) / Dz + 1
  57.     Points(i, j).coord(2) = y
  58. End Sub
  59.  
  60. ' ***********************************************
  61. ' Return a string indicating the object type.
  62. ' ***********************************************
  63. Property Get ObjectType() As String
  64.     ObjectType = "GRID"
  65. End Property
  66.  
  67.  
  68.  
  69. ' ***********************************************
  70. ' Fix the data coordinates at their transformed
  71. ' values.
  72. ' ***********************************************
  73. Public Sub FixPoints()
  74. Dim i As Integer
  75. Dim j As Integer
  76. Dim k As Integer
  77.  
  78.     For i = 1 To NumX
  79.         For j = 1 To NumZ
  80.             For k = 1 To 3
  81.                 Points(i, j).coord(k) = Points(i, j).trans(k)
  82.             Next k
  83.         Next j
  84.     Next i
  85. End Sub
  86.  
  87. ' ************************************************
  88. ' Apply a transformation matrix which may not
  89. ' contain 0, 0, 0, 1 in the last column to the
  90. ' object.
  91. ' ************************************************
  92. Public Sub ApplyFull(M() As Single)
  93. Dim i As Integer
  94. Dim j As Integer
  95.  
  96.     For i = 1 To NumX
  97.         For j = 1 To NumZ
  98.             m3ApplyFull Points(i, j).coord, M, Points(i, j).trans
  99.         Next j
  100.     Next i
  101. End Sub
  102.  
  103. ' ************************************************
  104. ' Apply a transformation matrix to the object.
  105. ' ************************************************
  106. Public Sub Apply(M() As Single)
  107. Dim i As Integer
  108. Dim j As Integer
  109.  
  110.     For i = 1 To NumX
  111.         For j = 1 To NumZ
  112.             m3Apply Points(i, j).coord, M, Points(i, j).trans
  113.         Next j
  114.     Next i
  115. End Sub
  116.  
  117.  
  118. ' ************************************************
  119. ' Apply a nonlinear transformation.
  120. ' ************************************************
  121. Public Sub Distort(D As Object)
  122. Dim i As Integer
  123. Dim j As Integer
  124.  
  125.     For i = 1 To NumX
  126.         For j = 1 To NumZ
  127.             D.Distort Points(i, j).coord(1), Points(i, j).coord(2), Points(i, j).coord(3)
  128.         Next j
  129.     Next i
  130. End Sub
  131.  
  132. ' ************************************************
  133. ' Write a grid to a file using Write.
  134. ' Begin with "GRID" to identify this object.
  135. ' ************************************************
  136. Public Sub FileWrite(filenum As Integer)
  137. Dim i As Integer
  138. Dim j As Integer
  139.  
  140.     ' Write basic information.
  141.     Write #filenum, _
  142.         "GRID", Xmin, Zmin, Dx, Dz, NumX, NumZ
  143.         
  144.     ' Write the Z values.
  145.     For i = 1 To NumX
  146.         For j = 1 To NumZ
  147.             Write #filenum, Points(i, j).coord(2)
  148.         Next j
  149.     Next i
  150. End Sub
  151.  
  152.  
  153.  
  154. ' ************************************************
  155. ' Draw the transformed points on a Form, Printer,
  156. ' or PictureBox.
  157. ' ************************************************
  158. Public Sub Draw(canvas As Object, Optional r As Variant)
  159. Dim i As Integer
  160. Dim j As Integer
  161.  
  162.     On Error Resume Next
  163.         
  164.     ' Draw lines parallel to the X axis.
  165.     For i = 1 To NumX
  166.         canvas.CurrentX = Points(i, 1).trans(1)
  167.         canvas.CurrentY = Points(i, 1).trans(2)
  168.         For j = 2 To NumZ
  169.             canvas.Line -(Points(i, j).trans(1), _
  170.                           Points(i, j).trans(2))
  171.         Next j
  172.     Next i
  173.     
  174.     ' Draw lines parallel to the Y axis.
  175.     For j = 1 To NumZ
  176.         canvas.CurrentX = Points(1, j).trans(1)
  177.         canvas.CurrentY = Points(1, j).trans(2)
  178.         For i = 2 To NumX
  179.             canvas.Line -(Points(i, j).trans(1), _
  180.                           Points(i, j).trans(2))
  181.         Next i
  182.     Next j
  183. End Sub
  184.  
  185.  
  186. ' ************************************************
  187. ' Read a grid from a file using Input.
  188. ' Assume the "GRID" label has alreaDz been
  189. ' read.
  190. ' ************************************************
  191. Public Sub FileInput(filenum As Integer)
  192. Dim i As Integer
  193. Dim j As Integer
  194.  
  195.     ' Get the basic information.
  196.     Input #filenum, Xmin, Zmin, Dx, Dz, NumX, NumZ
  197.     
  198.     ' Allocate the Points array and set the X and
  199.     ' Y values.
  200.     SetBounds Xmin, Dx, NumX, Zmin, Dz, NumZ
  201.     
  202.     ' Read the Z values.
  203.     For i = 1 To NumX
  204.         For j = 1 To NumZ
  205.             Input #filenum, Points(i, j).coord(2)
  206.         Next j
  207.     Next i
  208. End Sub
  209.  
  210.  
  211.